'use strict';

module.exports = (options) => {
    return async function jwtErr(ctx, next) {
        const headerStr = ctx.request.header.access_token; 
        const AdminDataindex = ctx.service.admin.dataindex
        if (headerStr) {
            try {
                // 解码token，需传加密时的 secret
                let decodeInfo = await ctx.app.jwt.verify(headerStr,  options.secret );
                ctx.state.user = decodeInfo; // 信息存一下，这步很重要，业务里要用

                // 检测数据库中是否存在当前数据
                const paramsObj =  { 
                    id:decodeInfo.data.id,
                    username:decodeInfo.data.username
                }
                // 获取首个匹配的用户                
                const data = await AdminDataindex.UserSelectFirst(paramsObj);
  
                if(data){
                    let user = data 
                    // 查询是否存在当前用户，包括是否注销
                    if(user.isDelete == '1'){
                        ctx.status = 403;
                        ctx.body = {  code: 403, msg: '当前用户已经注销！请注册新帐号',  };
                        return;
                    }
                    await next();
                }else{
                    ctx.status = 403;
                    ctx.body = {  code: 403, msg: '没有权限访问！请登录',  };
                    return;
                }

            } catch (error) {
                ctx.status = 500;
                // 翻译错误码
                let message = error.message;
                ctx.body = { msg:'认证出现异常', error: message, code: 500, };
                return;
            }
        } else {
            ctx.status = 401;
            ctx.body = {  code: 401, msg: '没有token，无法访问',  };
            return;
        }
    };
};